1. 索引

a = 'ABCDEFGHIJK'

a1 = a[2] # C
a2 = a[-1] # K

2. 切片

  • a[i:j:s] i: 起始位置的索引(从第几个开始截取) j: 结束位置的位数截取的长度 s: 步长 -> 隔 s 个截取字符
  • 当 i 缺省时,默认为 0,即 a[:3] 相当于 a[0:3]
  • 当 j 缺省时,默认为 len(alist) 字符串的长度, 即 a[1:] 相当于 a[1:10]
  • 当 s<0 时,i 缺省时,默认为 -1. j 缺省时,默认为 -len(a)-1 如果字符长度为 10 即 [::-1] 相当于 [-1:-11:-1] 或 [-1::-1] 就相当于倒叙

  • 反向字符串

a = 'ABCDEFGHIJK'

a1 = a[-1:-len(a) - 1:-1] # KJIHGFEDCBA
a2 = a[::-1] # KJIHGFEDCBA

  • 正向切片

a = 'ABCDEFGHIJK'

a1 = a[0:5]  # ABCDE
a2 = a[1:-2] # BCDEFGHI

  • 反向切片 list[s:e:b] -> s 和 e 都是从 0 开始从左边往右边数起 -> 通过步长进行方向切片 -> 将值倒着传最后再加上负的步长

# 方法一
a = 'ABCDEFGHIJK'

a1 = a[5:0:-1] # FEDCB
a2 = a[5::-1] # FEDCBA
a3 = a[8:3:-1] # IHGFE

  • 步长

a = 'ABCDEFGHIJK'

a1 = a[::2] # ACEGIK
a2 = a[0:5:2] # ACE

  • 反向步长

a = 'ABCDEFGHIJK'

a1 = a[::-2] # KIGECA
a2 = a[5:0:-2] # FDB

3. 字母大小写 首字母大写 大小写翻转 每个隔开(特殊字符或者数字)的单词首字母大写

  • .capitalize() -> 首字母大写
  • .upper() -> 全字母大写
  • .lower() -> 全字母小写
  • .swapcase() -> 大小写翻转
  • .title() -> 每个隔开(特殊字符或者数字)的单词首字母大写

s = 'kEVin'
st = 'fade,crazy*w4rri0r_songsong node_3'

s1 = s.capitalize() # Kevin -> 首字母大写
s2 = s.upper() # KEVIN -> 全字母大写
s3 = s.lower()# kevin -> 全字母小写
s4 = s.swapcase() # KevIN -> 大小写翻转
s5 = st.title() # Fade,Crazy*W4Rri0R_Songsong Node_3 -> 每个隔开(特殊字符或者数字)的单词首字母大写

4. 居中/空白填充

  • .center(字符串长度, 填充的字符串(默认为空)) -> 所填写的字符串长度一定要大于被应用字符串长度不然会没有效果

cs = 'Kevin'

c1 = cs.center(9) # (  Kevin  ) -> 加括号为了看清空格
c2 = cs.center(9, '~') # (~~Kevin~~)
c3 = cs.center(10, '~') # (~~Kevin~~~)

5. \t 填充空格 -> 没啥用

  • .expandtabs(空格数(默认不填8个空格)) -> 填充规则 -> 以 \t 为分割符 如果 \t 前面有3个字符,那么他只会填充 5 个空格

se = 'ale\tsir'
se1 = '\talesir'

s1 = se.expandtabs() # (ale     xsir)
s2 = se1.expandtabs() # (        alexsir)
s3 = se.expandtabs(10) # (ale       xsir)

6. 判断是否以什么开头/结尾

  • .startswith('str', start, end) -> start(起始位置的索引) 和 end(结束位置的位数)就相当于切片截取出某一段进行判断
  • .endswith('str', start, end) -> start(起始位置的索引) 和 end(结束位置的位数)就相当于切片截取出某一段进行判断

s = 'Kevin'

ss1 = s.startswith('v') # True
ss2 = s.startswith('v', 2, 4) # True

se1 = s.endswith('n') # True
se2 = s.endswith('i', 2, 4) # True

7. 通过元素查找索引 -> 相当于 js 中的 indexOf()

  •  .find('xx') -> 通过元素查找索引,找不到返回 -1
  •  .index('xx') -> 通过元素查找索引,找不到报错

s = 'Kevin'

sf1 = sc.find('i') # 3
sf2 = sc.find('a') # -1

si1 = sc.index('i') # 3 
si2 = sc.index('a') # 找不到报错
8.清除两端空格/换行符/回车 或 所传入的字符 - 清除左边空格/换行符/回车 或 所传入的字符 - 清除右边空格/换行符/回车 或 所传入的字符

  • strip('xxx(不传默认清除空格/换行符/回车)') -> 清除两端空格/换行符/回车 或 所传入的字符
  • lstrip('xxx(不传默认清除空格/换行符/回车)') -> 清除左边空格/换行符/回车 或 所传入的字符
  • rstrip('xxx(不传默认清除空格/换行符/回车)') -> 清除右边空格/换行符/回车 或 所传入的字符

s = '  清除空格/换行符/回车  '
s1 = '~~ 清除所传入的字符 ~~'
s2 = 'ab123ba'
s3 = '(abc)'

sq1 = s.strip()  # 清除空格/换行符/回车
sq2 = s1.strip('~')  # ( 清除所传入的字符 ) -> 空格还在
sq3 = s2.strip('ab')  # 清除两端的 a 和 b 的字母 -> 123
sq4 = s3.strip('()')  # 清除两端的 ( 和 ) -> abc

sql1 = s.lstrip()  # (清除空格/换行符/回车  ) -> 清除左边空格/换行符/回车
sql2 = s1.lstrip('~')  # ( 清除所传入的字符 ~~) -> 清除左边所传入的字符 空格还在

sqr1 = s.rstrip()  # (  清除空格/换行符/回车) -> 清除右边空格/换行符/回车
sqr2 = s1.rstrip('~')  # (~~ 清除所传入的字符 ) -> 清除右边所传入的字符 空格还在

9. 统计 xxx 在字符串中出现的次数

  • .count('xxx', start, end) -> start(起始位置的索引) 和 end(结束位置的位数)就相当于切片截取出某一段进行统计

s = 'Kevin Kevin'

c1 = s.count('ev') # 2
c2 = s.count('ev', 1, 5) # 1

10. 字符串分割成列表

  • .split('xxx(默认不传以空格分割)', num) -> 向左进行分割

    • 第一个参数: 不传值以连续空格为一个整体分割,传了 ' ' 就以单个空格分隔
    • 第二个参数: 分割num次,可以为空

s = '   Kevin    Kevin'

sp1 = s.split()  # ['Kevin', 'Kevin']
sp2 = s.split(' ')  # ['', '', '', 'Kevin', '', '', '', 'Kevin']
sp3 = s.split('e')  # ['   K', 'vin    K', 'vin']

s = 'Kevin_Aimer_Timmy_Jack'

sq = s.split('_') # ['Kevin', 'Aimer', 'Timmy', 'Jack'] -> 对所有 "_" 进行分割
sq1 = s.split('_', 1)  # ['Kevin', 'Aimer_Timmy_Jack']  -> 只对前一个 "_" 进行分割
sq2 = s.split('_', 2)  # ['Kevin', 'Aimer', 'Timmy_Jack'] -> 只对前两个 "_" 进行分割
sq3 = s.split('_', 3)  # ['Kevin', 'Aimer', 'Timmy', 'Jack'] -> 只对前三个 "_" 进行分割

  • .rsplit('xxx(默认不传以空格分割)', num) -> 向右进行分割

    • 注意: .rsplit() 方法只有使用 num 参数才有意义,不然和 .split() 的效果是一样的
    • 第一个参数: 不传值以连续空格为一个整体分割,传了 ' ' 就以单个空格分隔
    • 第二个参数: 分割num次,可以为空

s = 'Kevin_Aimer_Timmy_Jack'

srq = s.rsplit('_')  # ['Kevin', 'Aimer', 'Timmy', 'Jack'] -> 对所有 "_" 进行分割
srq1 = s.rsplit('_', 1)  # ['Kevin_Aimer_Timmy', 'Jack']  -> 只对后面的一个 "_" 进行分割
srq2 = s.rsplit('_', 2)  # ['Kevin_Aimer', 'Timmy', 'Jack'] -> 只对后面的两个 "_" 进行分割
srq3 = s.rsplit('_', 3)  # ['Kevin', 'Aimer', 'Timmy', 'Jack'] -> 只对后面的三个 "_" 进行分割

11. 替换

  • .replace('被替换的str','str', num) -> num 指定,则替换不超过 num 次,不传全部替换

s = '街坊 街坊 街坊'
sr1 = s.replace('街坊', '老王') # 老王 老王 老王
sr2 = s.replace('街坊', '老王', 2) # 老王 老王 街坊

12. is 系列

name='taibai123'
print(name.isalnum()) # 字符串是否由字母或数字组成
print(name.isalpha()) # 字符串是否只由字母组成
print(name.isdigit()) # 字符串是否只由数字组成
print(name.islower()) # 字符串是否只由小写组成
print(name.isupper()) # 字符串是否只由大写组成
print(name.isspace()) # 字符串是否只由空格组成

13. join

  • 'xxx'.join(str)

sj = '一二三四'
s_j = '%'.join(sj) # 一%二%三%四